package com.atguigu.srb.core.controller.admin;


import com.atguigu.srb.base.exception.SrbException;
import com.atguigu.srb.base.result.ResponseEnum;
import com.atguigu.srb.base.result.ResponseVo;
import com.atguigu.srb.base.util.SrbAssert;
import com.atguigu.srb.core.pojo.entity.IntegralGrade;
import com.atguigu.srb.core.service.IntegralGradeService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.sql.Wrapper;
import java.util.Date;
import java.util.List;

/**
 * <p>
 * 积分等级表 前端控制器
 * </p>
 *
 * @author Atguigu
 * @since 2023-03-25
 */
@RestController
@Slf4j
//@CrossOrigin
@RequestMapping("/admin/core/integralGrade")
@Api(tags = "积分等级管理模块")
public class AdminIntegralGradeController {
    @Resource
    IntegralGradeService integralGradeService;
    @ApiOperation("分页查询积分等级列表")
    @GetMapping("{pageNum}/{pageSize}")
    public ResponseVo page(@PathVariable("pageNum")Integer pageNum ,
                           @PathVariable("pageSize")Integer pageSize){
//        List<IntegralGrade> integralGrades = integralGradeService.list(Wrappers
//                .lambdaQuery(IntegralGrade.class)
//                //自定义sql查询: limit index,size
//                .last("limit " + (pageNum - 1) * pageSize + " , " + pageSize));
//        return ResponseVo.ok().data("items" , integralGrades);
            return ResponseVo.ok().data("page",
                    integralGradeService.page(new Page<IntegralGrade>(pageNum,pageSize)));
    }
    /*
        后端接口：
            前端访问时 有成功、有异常、有失败
                后端接口响应：
                    响应报文状态码都为200
                    响应体中设置响应的数据：
                                    统一响应类对象转为json：
                                        状态码：code 0 代表成功，1代表失败 ， 2代表sql错误 3 代表参数错误
                                        描述信息：message  描述状态码
                                        响应数据: data   成功的响应数据

            统一响应类的失败状态码可以在后端定义好 响应时可以直接获取使用：可以使用常量类/枚举类 封装
                    枚举类一个对象可以携带多个属性值
            统一响应类：以后响应时需要创建对象设置参数
                    ok()/error()/setResult()/


     */
    //查询所有积分等级数据
    @ApiOperation("查询所有积分等级列表")
    @GetMapping  // get+/integralGrade
    public ResponseVo list(){
        log.debug("{}级别的日志,当前时间:{}" , "debug",new Date());
        log.info("{}级别的日志,当前时间:{}" , "info",new Date());
        log.warn("{}级别的日志,当前时间:{}" , "warn",new Date());
        log.error("{}级别的日志,当前时间:{}" , "error",new Date());

        return ResponseVo.ok().data("items",integralGradeService.list() );
    }
    @ApiOperation("根据id查询积分等级")
    @GetMapping("{id}")  // get+/integralGrade/id
    //@ApiParam("积分等级id")
    public ResponseVo getById(@ApiParam(value = "用户id",
        type = "long" , example = "1") @PathVariable("id")Long id){
        IntegralGrade integralGrade = integralGradeService.getById(id);
        if(integralGrade==null){
            return ResponseVo.setResult(ResponseEnum.DATA_NOT_EXISTS);
        }
        return ResponseVo.ok().data("item",integralGrade);
    }

    //删除
    @ApiOperation("根据id删除积分等级")
    @DeleteMapping("{id}")
    public ResponseVo deleteById(@PathVariable("id")Long id){
        boolean b = integralGradeService.removeById(id);
        return b?ResponseVo.ok():ResponseVo.setResult(ResponseEnum.ERROR);
    }
    //更新
    @ApiOperation("根据id更新积分等级")
    @PutMapping //更新时提交的json中应该携带原数据的id
    public ResponseVo updateById(@RequestBody IntegralGrade integralGrade){
        //更新时integralGrade的id值不能为空
        SrbAssert.assertNotNull(integralGrade.getId(),ResponseEnum.PARAM_IS_NULL_ERROR);
        boolean b = integralGradeService.updateById(integralGrade);
        return b?ResponseVo.ok():ResponseVo.setResult(ResponseEnum.ERROR);
    }
    //新增
    @ApiOperation("新增积分等级")
    @PostMapping
    public ResponseVo save(@RequestBody IntegralGrade integralGrade){
        boolean b = integralGradeService.save(integralGrade);
        return b?ResponseVo.ok():ResponseVo.setResult(ResponseEnum.ERROR);
    }


}

